home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / SERIE_AI / AI_081 / CBHD501 / SRC / M2 / SCSIIO.D < prev    next >
Text File  |  1998-03-14  |  7KB  |  190 lines

  1. DEFINITION MODULE ScsiIO;
  2. (****************************************************************************
  3.  *
  4.  * Scsi-Input/Output auf midlevel-Ebene
  5.  *
  6.  *  (c) 1990-1992 Helge Schulz
  7.  *  (c) 1990-1993 Steffen Engel
  8.  *
  9.  * $Source: E:\HM2\LIB\se\rcs\scsiio.d,v $
  10.  *
  11.  * $Revision: 1.9 $
  12.  *
  13.  * $Author: S_Engel $
  14.  *
  15.  * $Date: 1996/02/03 19:32:00 $
  16.  *
  17.  * $State: Exp $
  18.  *
  19.  *****************************************************************************
  20.  * History:
  21.  *
  22.  * $Log: scsiio.d,v $
  23.  * Revision 1.9  1996/02/03  19:32:00  S_Engel
  24.  * Kleine Anpassungen
  25.  *
  26.  * Revision 1.8  1995/10/30  17:45:14  S_Engel
  27.  * *** empty log message ***
  28.  *
  29.  * Revision 1.7  1995/05/10  11:19:34  S_Engel
  30.  * Export von Init
  31.  *
  32.  * Revision 1.6  1995/04/04  14:56:04  S_Engel
  33.  * ScsiActive statt der Varianten internal/external/none
  34.  *
  35.  * Revision 1.5  1995/03/08  03:20:24  S_Engel
  36.  * InquireDev und InquireSCSI korrekt mit langem Ergebnis.
  37.  *
  38.  * Revision 1.4  1995/02/10  14:01:04  S_Engel
  39.  * In und Out als Prozedurvariablen, damit man sich davor
  40.  * einklinken kann.
  41.  *
  42.  * Revision 1.3  1995/02/10  12:40:44  S_Engel
  43.  * Anpassungen an aktuellen SCSI-Treiber
  44.  *
  45.  * Revision 1.2  1995/02/08  00:00:10  S_Engel
  46.  * Umstellung auf handleorientierte SCSI-Routinen
  47.  *
  48.  * Revision 1.1  1995/01/01  19:14:04  S_Engel
  49.  * Initial revision
  50.  *
  51.  *
  52.  *
  53.  ****************************************************************************)
  54.  
  55.  
  56. (* Systemabhängiges *)
  57. (* IMPLEMENTATION FÜR  >>> Hänisch-Modula-2 <<< *)
  58. (*                                              *)
  59. (* Durchgeführt von Steffen Engel               *)
  60. (*                                              *)
  61. (*$S-   Stack-Checks                            *)
  62. (*$I-   keine Variablen-Initialisierung         *)
  63. (*$V-   keine arithmetischen Kontrollen         *)
  64. (*$T-   kein Bereichstest                       *)
  65. (*$Y-   keine Laufzeittests auf RETURN und CASE *)
  66. (*                                              *)
  67. (*----------------------------------------------*)
  68.  
  69. (*$R2+ D2/A2 sichern        *)
  70. (*$K+  Aufrufer räumt Stack *)
  71.  
  72.  
  73. IMPORT SYSTEM, System;
  74.  
  75. (* Standard HM2-Libs *)
  76.  
  77. (* Eigene Libs *)
  78.  
  79. (* Projektlibs *)
  80. IMPORT ScsiDefs;
  81.  
  82.  
  83.  
  84.   (*------ Deklarationsteil *)
  85.  
  86. TYPE
  87.   tSCSICmd  = ScsiDefs.tSCSICmd;
  88.   tpSCSICmd = ScsiDefs.tpSCSICmd;
  89.   tHandle   = ScsiDefs.tHandle;
  90.  
  91.  
  92. CONST
  93.     DefTimeout     =      2000; (* Standard Auszeit für Kommandos (2 S)    *)
  94.     DmaBlockLen    =       512; (* Blocklänge des DMA-Bausteins            *)
  95.  
  96.     NOSCSIERROR     = ScsiDefs.NOSCSIERROR;   (* Kein Fehler                                  *)
  97.     SELECTERROR     = ScsiDefs.SELECTERROR;   (* Fehler beim Selektieren                      *)
  98.     STATUSERROR     = ScsiDefs.STATUSERROR;   (* Default-Fehler                               *)
  99.     PHASEERROR      = ScsiDefs.PHASEERROR;    (* ungültige Phase                              *)
  100.     BSYERROR        = ScsiDefs.BSYERROR;      (* BSY verloren                                 *)
  101.     BUSERROR        = ScsiDefs.BUSERROR;      (* Busfehler bei DMA-Übertragung                *)
  102.     TRANSERROR      = ScsiDefs.TRANSERROR;    (* Fehler beim DMA-Transfer (nichts übertragen) *)
  103.     FREEERROR       = ScsiDefs.FREEERROR;     (* Bus wird nicht mehr freigegeben              *)
  104.     TIMEOUTERROR    = ScsiDefs.TIMEOUTERROR;  (* Timeout                                      *)
  105.     DATATOOLONG     = ScsiDefs.DATATOOLONG;   (* Daten für ACSI-Softtransfer zu lang          *)
  106.     LINKERROR       = ScsiDefs.LINKERROR;     (* Fehler beim Senden des Linked-Command (ACSI) *)
  107.     TIMEOUTARBIT    = ScsiDefs.TIMEOUTARBIT;  (* Timeout bei der Arbitrierung                 *)
  108.     PENDINGERR      = ScsiDefs.PENDINGERR;    (* auf diesem Handle liegt noch ein Fehler an   *)
  109.     PARITYERROR     = ScsiDefs.PARITYERROR;   (* auf diesem Handle liegt noch ein Fehler an   *)
  110.  
  111. (*
  112.     MaxCmdLen      =        50; (* Höchste mögliche Kommandolänge          *)
  113.     MaxDmaAdr      =         7; (* Höchste mögliche DMA-Adresse            *)
  114.     MaxScsiAdr     =         7; (* Höchste mögliche SCSI-Adresse           *)
  115.     MaxRetrys      =         5; (* Max. Anzahl der Versuche nach Timeout   *)
  116. (*    MaxDmaLen      =    130048; (* Höchste Anzahl von Bytes für DMA-Modus  *)*)
  117.     MaxDmaLen      =   64*1024; (* Höchste Anzahl von Bytes für DMA-Modus  *)
  118.     MaxScsiLenTT   =  512*1024; (* Höchste Anzahl von Bytes für TT-SCSI    *)
  119.     DefDiscTimeout =       400; (* Standard Auszeit für Motorabs. (2 S)    *)
  120.     DiscWaitTime   =         1; (* Wartezeit für Floppy-Chip  (1/200 S)    *)
  121.     MsgWaitTime    =        10; (* Wartezeit für Message-BYTE (1/200 S)    *)
  122. *)
  123.  
  124. CONST ACSIBus = 0;
  125.       SCSIBus = 1;
  126.       ALIABus = 2;
  127.  
  128.  
  129.  
  130. VAR
  131.     ScsiErrorCode  : SHORTINT;
  132.       (*
  133.        * ScsiErrorCode gibt die Fehlerursache an, falls eine der
  134.        * nachfolgenden Funktionen FALSE zurückgibt.
  135.        * Werte größer 0 : Statusbyte
  136.        * Kleiner 0      : Fehlernummer
  137.        *) 
  138.  
  139.     ReqBuff         : ARRAY[0..17] OF SYSTEM.LOC;
  140.  
  141.  
  142. VAR ScsiActive  : BOOLEAN;
  143.     ScsiCall    : ScsiDefs.tpScsiCall;
  144.  
  145.  
  146. (* Als Variablen, um sich davor einzuklinken *)
  147. VAR In  : PROCEDURE (ScsiDefs.tpSCSICmd) : LONGINT;
  148.     Out : PROCEDURE (ScsiDefs.tpSCSICmd) : LONGINT;
  149.  
  150.  
  151. PROCEDURE MyIn(Parms : ScsiDefs.tpSCSICmd): LONGINT;
  152.  
  153. PROCEDURE MyOut(Parms : ScsiDefs.tpSCSICmd): LONGINT;
  154.  
  155.  
  156. PROCEDURE InquireSCSI(    what : SHORTINT;
  157.                       VAR Info : ScsiDefs.tBusInfo) : LONGINT;
  158.  
  159. PROCEDURE InquireBus (    what     : SHORTINT;
  160.                           BusNo    : SHORTINT;
  161.                       VAR Dev      : ScsiDefs.tDevInfo) : LONGINT;
  162.  
  163.  
  164. PROCEDURE CheckDev(     BusNo     : SHORTINT;
  165.                     VAR (*$RO*) DevNo     : ScsiDefs.DLONG;
  166.                     VAR Name      : STRING;
  167.                     VAR Features  : BITSET): LONGINT;
  168.  
  169. PROCEDURE RescanBus(BusNo : SHORTINT) : LONGINT;
  170.  
  171. PROCEDURE Open (    Bus     : SHORTINT;
  172.                 VAR (*$RO*) Id      : ScsiDefs.DLONG;
  173.                 VAR MaxLen  : LONGCARD) : LONGINT;
  174.  
  175. PROCEDURE Close(handle : ScsiDefs.tHandle) : LONGINT;
  176.  
  177. PROCEDURE Error(handle  : ScsiDefs.tHandle;
  178.                 rwflag,
  179.                 error   : SHORTINT) : LONGINT;
  180.  
  181.  
  182. PROCEDURE Init;
  183. (* Initialisiert die SCSI-Routinen.
  184.  * wir vom Modulrumpf automatisch initialisiert, kann aber nachträglich erneut
  185.  * gerufen werden, falls ein Treiber nachgeladen wurde.
  186.  *)
  187.  
  188. END ScsiIO.
  189.  
  190.